from fastai.vision import *
from fastai import *
Choose an appropriate name for your labeled images. You can run these steps multiple times to create different labels.
folder = 'Vader'
from google.colab import drive
drive.mount('/content/gdrive', force_remount=True)
root_dir = "/content/gdrive/My Drive/"
base_dir = root_dir + 'fastai-v3/data'
file = 'urls_vader.csv'
path = Path(base_dir)
dest = path/folder
dest.mkdir(parents=True, exist_ok=True)
folder = 'Kylo'
drive.mount('/content/gdrive', force_remount=True)
root_dir = "/content/gdrive/My Drive/"
base_dir = root_dir + 'fastai-v3/data'
file = 'urls_kylo.csv'
path = Path(base_dir)
dest = path/folder
dest.mkdir(parents=True, exist_ok=True)
You will need to run this cell once per each category.
path.ls()
classes = ['vader','kylo']
help(download_images)
download_images(path/folder/file, dest, max_pics=200)
download_images(path/file, dest, max_pics=20, max_workers=0)
Then we can remove any images that can't be opened:
for c in classes:
print(c)
verify_images(path/c, delete=True, max_size=500)
np.random.seed(42)
data = ImageDataBunch.from_folder(path, train=".", valid_pct=0.2,
ds_tfms=get_transforms(), size=224, num_workers=4).normalize(imagenet_stats)
#If you already cleaned your data, run this cell instead of the one before
np.random.seed(42)
data = ImageDataBunch.from_csv(path, folder=".", valid_pct=0.2, csv_labels='cleaned.csv',
ds_tfms=get_transforms(), size=224, num_workers=4).normalize(imagenet_stats)
Good! Let's take a look at some of our pictures then.
data.classes
data.show_batch(rows=3, figsize=(7,8))
data.classes, data.c, len(data.train_ds), len(data.valid_ds)
learn = cnn_learner(data, models.resnet50, metrics=error_rate)
learn.fit_one_cycle(4)
learn.save('stage-1')
learn.unfreeze()
learn.lr_find()
learn.recorder.plot()
learn.fit_one_cycle(2, max_lr=slice(3e-5,3e-4))
learn.save('stage-2')
learn.load('stage-2');
interp = ClassificationInterpretation.from_learner(learn)
interp.plot_confusion_matrix()
learn.export()
defaults.device = torch.device('cpu')
img = open_image(path/'vader-2.jpg')
img
We create our Learner in production enviromnent like this, jsut make sure that path contains the file 'export.pkl' from before.
learn = load_learner(path)
pred_class,pred_idx,outputs = learn.predict(img)
pred_class
img = open_image(path/'kylo-2.jpg')
img
pred_class,pred_idx,outputs = learn.predict(img)
pred_class
img = open_image(path/'vader-7.jpg')
img
pred_class,pred_idx,outputs = learn.predict(img)
pred_class
img = open_image(path/'vader-8.jpg')
img
pred_class,pred_idx,outputs = learn.predict(img)
pred_class
img = open_image(path/'kylo-8.jpg')
img
pred_class,pred_idx,outputs = learn.predict(img)
pred_class
img = open_image(path/'kylo-1.jpg')
img